package com.todo.strategy.online.application.service;

import com.todo.common.common.entity.response.page.PageResult;
import com.todo.strategy.online.application.entity.bo.PlanSetBO;
import com.todo.strategy.online.application.entity.condition.PlanSetConditionBO;

import java.time.LocalDateTime;
import java.util.List;

/**
 * (PlanSet)表服务接口
 *
 * @author zhangwenxiang
 * @since 2024-03-04 00:19:47
 */
public interface PlanSetService {

    /**
     * 新增计划清单
     *
     * @param planSetBO
     * @return
     */
    Boolean insertPlanSet(PlanSetBO planSetBO);

    /**
     * 更新计划清单
     *
     * @param planSetBO
     * @return
     */
    Boolean updatePlanSet(PlanSetBO planSetBO);


    /**
     * 根据主键删除计划清单
     *
     * @param id
     * @return
     */
    Boolean removePlanSetById(Long id);

    /**
     * 根据主键查询清单计划详情
     *
     * @param id
     * @return
     */
    PlanSetBO queryPlanSetById(Long id);

    /**
     * 根据用户id查询计划清单列表
     *
     * @param userId
     * @return
     */
    List<PlanSetBO> queryPlanSetByUserId(Long userId);

    /**
     * 多条件查询清单计划列表
     *
     * @param planSetConditionBO
     * @return
     */
    PageResult<PlanSetBO> queryPlanSetByCondition(PlanSetConditionBO planSetConditionBO);

    /**
     * 根据用户id和计划id列表批量删除计划清单
     *
     * @param userId
     * @param planIdList
     * @return
     */
    Boolean removePlanSetByIdList(Long userId, List<String> planIdList);

    /**
     * 根据用户id和计划时间查询计划清单列表
     *
     * @param userId
     * @param startTime
     * @param endTime
     * @return
     */
    List<PlanSetBO> queryPlanSetListByTime(Long userId, LocalDateTime startTime, LocalDateTime endTime);

    /**
     * 根据计划id列表查询计划清单列表
     *
     * @param planIdList
     * @return
     */
    List<PlanSetBO> queryPlanSetByIdList(List<Long> planIdList);
}
